package personaje;

import logica.*;
import nivel.*;
import oyente.*;
import sprite.personajes.SpriteMario;

/**
 * Clase que modela al personaje principal del juego
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */
public class Mario extends Personaje {

	/** Oyente asociado al personaje */
	protected Manejo m;

	/**
	 * Constructor de Mario
	 * 
	 * Encargado de inicializar la logica, el casillero, el oyente, y el icono
	 * 
	 * @param n
	 *            nivel en el que se encuentra mario
	 */
	public Mario(Nivel n) {
		super();
		setControl(new Logica(this));
		setCasillero(new Casillero(192, 192));
		setNivel(n);
		m = new Manejo(this);
		icono = new SpriteMario();
	}

	// Comandos
	/*
	 * (non-Javadoc)
	 * 
	 * @see personaje.Personaje#moverDerecha()
	 */
	public void moverDerecha() {
		super.moverDerecha();

		if (casilleroActual.getX() == 3264) {
			nivel.ganoNivel();
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see personaje.Personaje#saltar()
	 */
	public void saltar() {
		if (control.saltar() && control.cantSaltos() < 5) {
			control.setSaltando(true);
			control.setCayendo(false);
			casilleroActual.getCoordenada().setY(casilleroActual.getY() - 16);
			control.aumentarSaltos();
			nivel.getGrafica().getManejador().moverArriba();
		} else if (!control.estaCayendo()) {
			control.setSaltando(false);
		}
	}

	/**
	 * Metodo utilizado para realizar un salto mientras se mueve hacia la
	 * izquierda
	 */
	public void saltarIzquierda() {
		saltar();
		moverIzquierda();
	}

	/**
	 * Metodo utilizado para realizar un salto mientras se mueve hacia la
	 * derecha
	 */
	public void saltarDerecha() {
		saltar();
		moverDerecha();
	}

	// Consultas

	/**
	 * Retorna el oyente asociado a Mario
	 * 
	 * @return manejo
	 */
	public Manejo getManejo() {
		return m;
	}

}
